GRE、PPTP、L2TP VPN隧道协议简介
2013-12-09 18:11:06 阿炯

IPSec 和Multiprotocol Label Switching (MPLS) VPN出现前,GRE被用来提供Internet上的VPN功能。GRE将用户数据包封装到携带数据包中,因为支持多种协议,多播,点到点或点到多点协议,如今,GRE仍然被使用。

在GRE隧道中,路由器会在封装数据包的IP头部指定要携带的协议,并建立到对端路由器的虚拟点对点连接


Passenger: 要封装的乘客协议 (IPX, AppleTalk, IP, IPSec, DVMRP, etc.).

Carrier: 封装passenger protocol的GRE协议,插入到transport和passenger包头之间, 在GRE包头中定义了传输的协议

Transport: IP协议携带了封装的passenger protocol. 这个传输协议通常实施在点对点的GRE连接中(GRE是无连接的).

GRE的特点:
GRE是一个标准协议
支持多种协议和多播
能够用来创建弹性的VPN
支持多点隧道
能够实施QOS

GRE的缺点:
缺乏加密机制
没有标准的控制协议来保持GRE隧道(通常使用协议和keepalive)
隧道很消耗CPU
出现问题要进行DEBUG很困难
MTU和IP分片是一个问题

GRE隧道
GRE建立的是简单的(不进行加密)VPN隧道,他通过在物理链路中使用ip地址和路由穿越普通网络。

大部分协议都没有内建加密机制,所以携带他们穿越网络的很常见的方法就是使用加密(如使用IPSec)的GRE隧道,这样可以为这些协议提供安全性。(相关配置请参看GRE over IPSec)网状连接(Full-Mesh)

由于GRE是建立点对点的隧道,如果要多个端点的网状互联,则必须采用这种Hub-and-spoke的拓扑形式


但是可以通过使用NHRP(Next-Hop Resolution Protocol)来自动建立全网状拓扑。(相关配置请参看NHRP 配置全网状互联GRE隧道)


VPDN简介


VPDN(Virtual Private Dial Network,虚拟私有拨号网)是指利用公共网络(如ISDN和PSTN)的拨号功能及接入网来实现虚拟专用网,从而为企业、小型ISP、移动办公人员提供接入服务。

VPDN采用专用的网络加密通信协议,在公共网络上为企业建立安全的虚拟专网。企业驻外机构和出差人员可从远程经由公共网络,通过虚拟加密隧道实现和企业总部之间的网络连接,而公共网络上其它用户则无法穿过虚拟隧道访问企业网内部的资源。

VPDN有下列两种实现方式:

网络接入服务器(NAS)通过隧道协议,与VPDN网关建立通道的方式。这种方式将客户的PPP连接直接连到企业的网关上,目前可使用的协议有L2F与L2TP。其好处在于:对用户是透明的,用户只需要登录一次就可以接入企业网络,由企业网进行用户认证和地址分配,而不占用公共地址,用户可使用各种平台上网。这种方式需要NAS支持VPDN协议,需要认证系统支持VPDN属性,网关一般使用路由器或VPN专用服务器。

客户机与VPDN网关建立隧道的方式。这种方式由客户机先建立与Internet的连接,再通过专用的客户软件(如Win2000支持的L2TP客户端)与网关建立通道连接。其好处在于:用户上网的方式和地点没有限 制,不需ISP介入。缺点是:用户需要安装专用的软件(一般都是Win2000平台),限制了用户使用的平台。

VPDN隧道协议可分为PPTP、L2F和L2TP三种Point to Point Tunneling Protocol(PPTP)

点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术, 它工作在第二层。通过该协议,远程用户能够通过Microsoft Windows NT工作站、Windows 9x操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过Internet安全链接到公司网络。

PPTP协议假定在PPTP客户机和PPTP服务器之间有连通并且可用的IP网络。因此如果PPTP客户机本身已经是IP网络的组成部分,那么即可通过该 IP网络与PPTP服务器取得连接;而如果PPTP客户机尚未连入网络,譬如在Internet拨号用户的情形下,PPTP客户机必须首先拨打NAS以建 立IP连接。这里所说的PPTP客户机也就是使用PPTP协议的VPN客户机,而PPTP服务器亦即使用PPTP协议的VPN服务器。


PPTP Access Concentrator (PAC): 接入服务商,允许拨号接入连接(通常是由ISP担任,而且不需要ISP的协助来建立隧道)

PPTP Network Server (PNS):通常是PPTP服务器或者路由器用来建立PPTP隧道

Microsoft Point-to-Point Encryption (MPPE) :和IPSec一样,是一种数据加密协议,用来为PPP拨号连接传输的数据进行加密。MPPE使用RSA算法来进行加密,支持40-bit和128-bit的会话密钥

PPTP只能通过PAC和PNS来实施,其它系统没有必要知道PPTP。拨号网络可与PAC相连接而无需知道PPTP。标准的PPP客户机软件可继续在隧道PPP链接上操作。


PPTP VPN 协商过程:

客户端(笔记本)通过PPP建立到ISP NAS的连接

客户端建立到PNS(在这里是CISCO路由器)的PPTP连接

客户端和PNS之间建立了一个2层的隧道。多种协议能够在这个隧道上传输

使用MPPE加密PPP数据包,这些数据包接下来通过enhanced GRE封装,并在IP网络上传输

在客户端和PPTP服务器之间建立第二个PPP over GRE会话

数据能够在这个IP/GRE/PPP上传输

PPTP隧道使用不同的TCP连接来控制会话

PPTP使用GRE的扩展版本来传输用户PPP包。这些增强允许为在PAC和PNS之间传输用户数据的隧道提供低层拥塞控制和流控制。这种机制允许高效使用隧道可用带宽并且避免了不必要的重发和缓冲区溢出。PPTP没有规定特定的算法用于低层控制,但它确实定义了一些通信参数来支持这样的算法工作。

PPTP缺点:
不支持QOS

每个用户一个隧道

认证和加密比较脆弱


Layer 2 Tunneling Protocol (L2TP)

L2TP协议提供了对PPP链路层数据包的通道(Tunnel)传输支持,允许二层链路端点和PPP会话点驻留在不同设备上并且采用包交换网络技术进行信息交互,从而扩展了PPP模型。L2TP协议结合了L2F协议和PPTP协议的各自优点,成为IETF有关二层隧道协议的工业标准。


L2TP Access Concentrator (LAC) :表示L2TP访问集中器,类似于PPTP中的PAC,是附属在交换网络上的具有PPP端系统和L2TP协议处理能力的设备。LAC一般是一个网络接入服 务器NAS,主要用于通过PSTN/ISDN网络为用户提供接入服务。

L2TP Network Server (LNS) :表示L2TP网络服务器,也叫做"home gateway",类似于PPTP中的PNS,是PPP端系统上用于处理L2TP协议服务器端部分的设备。

L2TP隧道建立过程:


用户使用PPP拨号到ISP,并获得一个IP地址。客户端和ISP之间建立邻接,客户端能够接入到Internet。这个步骤是用来作为普通的Internet连接

客户端决定建立一个端到端的L2TP隧道到home gateway,并在下面建立一个新的PPP会话之前前会使用控制会话建立一个隧道

在L2TP隧道里建立一个新的PPP隧道,并分配给客户端一个IP地址。客户端和home gateway之间会使用virtual point-to-point,通过PPP封装进L2TP隧道,建立一个新的IP邻接关系。

建立IPSec保护的L2TP VPN:


客户端使用PPP拨入ISP,ISP分配IP地址给客户端

客户端使用L2TP通过一个VPN端口连接到home gateway,home gateway使用AAA服务器对隧道进行认证,并分配一个隧道内部IP地址给客户端,在客户端和gateway之间建立IPSec,来提供L2TP会话的加密。

VPDN拨号用户与总部路由服务器建立连接的过程如下:

拨号用户拨打一个初始化呼叫有VPDN访问接入服务器(NAS)

NAS 接收此呼叫,并将启动一个到总部路由服务器(Home Gateway)的L2TP Tunnel 协商:Home Gateway 利用总部的Radius服务器来鉴定NAS 的Tunnel ID,认证通过以后,向NAS发起CHAP Challenge 信号;NAS对来自Home Gateway的Tunnel 进行认证,认证通过之后,就建立了NAS和Home Gateway之间的Tunnel连接。此时,Home Gateway就可以利用其Radius服务器对VPDN用户进行用户级的认证,如果认证通过将建立Home Gateway和用户间的端到端的PPP连接。如果在NAS和Home Gateway之间建立了Tunnel连接之后,又有另一VPDN用户拨打同一NAS,此时将不会重复上述建立Tunnel的过程,而是直接进行用户级的 认证。

从拨号用户发出的帧被NAS接收到以后,被封装在L2TP中,通过IP隧道被转发到总部路由服务器。这样,用户就可以对总部的信息进行访问,实现信息共享。

两种典型的L2TP隧道模式

由远程拨号用户发起:

远程系统拨入LAC,由LAC通过Internet向LNS发起建立通道连接请求。拨号用户地址由LNS分配;对远程拨号用户的验证与计费既可由LAC侧的代理完成,也可在LNS侧完成。

直接由LAC客户(指可在本地支持L2TP协议的用户)发起:

此时LAC客户可直接向LNS发起通道连接请求,无需再经过一个单独的LAC设备。此时,LAC客户地址的分配由LNS来完成。

L2TP的优势


灵活的身份验证机制以及高度的安全性:

L2TP协议本身并不提供连接的安全性,但它可依赖于PPP提供的认证(比如CHAP、PAP等),因此具有PPP所具有的所有安全特性。L2TP也可与IPSec结合起来实现数据安全,这使得通过L2TP所传输的数据更难被攻击。L2TP还可根据特定的网络安全要求在L2TP之上采用通道加密技术、端对端数据加密或应用层数据加密等方案来提高数据的安全性。

多协议传输:

L2TP传输PPP数据包,这样就可以在PPP数据包内封装多种协议。

支持RADIUS服务器的验证:
LAC端将用户名和密码发往RADIUS服务器进行验证申请,RADIUS服务器负责接收用户的验证请求,完成验证。

支持内部地址分配:
LNS可放置于企业网的防火墙之后,它可以对远端用户的地址进行动态的分配和管理,可支持私有地址应用(RFC1918)。为远端用户所分配的地址不是Internet地址而是企业内部的私有地址,这样方便了地址的管理并可以增加安全性。

网络计费的灵活性:
可在LAC和LNS两处同时计费,即ISP处(用于产生帐单)及企业网关(用于付费及审计)。L2TP能够提供数据传输的出入包数、字节数以及连接的起始、结束时间等计费数据,可根据这些数据方便地进行网络计费。

可靠性:
L2TP协议支持备份LNS,当一个主LNS不可达之后,LAC可以重新与备份LNS建立连接,这样增加了VPN服务的可靠性和容错性。

该协议是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。

L2TP协议是由IETF起草,微软、Ascend、Cisco、3COM等公司参予制定的二层隧道协议,它结合了PPTP和L2F两种二层隧道协议的优点,为众多公司所接受,已经成为IETF有关2层通道协议的工业标准,基于微软的点对点隧道协议(PPTP)和思科2层转发协议(L2F)之上的,被一个因特网服务提供商和公司使用使这个虚拟私有网络的操作能够通过因特网。

Linux VPN 与隧道技术

Linux作为开源操作系统的代表,以其稳定性和灵活性,在VPN(Virtual Private Network,虚拟私人网络)和隧道技术领域发挥着关键作用。VPN允许用户通过加密隧道安全访问远程网络,而隧道技术则更广泛地用于数据封装和传输。根据StatCounter的数据,2025年Linux在服务器市场的占有率已超过85%,特别是在云计算和边缘计算中。VPN市场规模据Grand View Research预计,到2030年将达到1500亿美元。

VPN是一种通过公共网络(如互联网)创建安全、私密的连接的技术。它模拟了一个私人网络的环境,让用户感觉像在本地局域网中。Linux支持多种VPN协议,包括PPTP(已过时)、L2TP/IPSec、OpenVPN、WireGuard和IKEv2等。

VPN的核心是加密和隧道:数据在发送前加密,然后通过隧道传输到目的地。隧道确保数据不被中间人截获。Linux内核内置了部分支持,如IPSec模块,而用户空间工具如OpenVPN提供更灵活的实现。

为什么选择Linux VPN?开源性允许自定义;性能高,适合高负载服务器;兼容性强,可与Windows、Android等互连。

VPN的类型
站点到站点VPN(Site-to-Site):连接两个远程网络,如公司分支机构。常用IPSec或GRE隧道结合。

远程访问VPN(Remote Access):允许单个用户连接到公司网络。OpenVPN和WireGuard流行。

SSL VPN:基于HTTPS的VPN,无需客户端软件。Linux可使用OpenVPN的SSL模式。

移动VPN:针对移动设备,WireGuard因轻量而受欢迎。

在Linux中,VPN可以是内核级(如IPSec)或用户级(如OpenVPN)。内核级效率高,但配置复杂。

VPN协议详解
IPSec:Internet Protocol Security,由IKE(Internet Key Exchange)和ESP/AH协议组成。IKE处理密钥交换,ESP提供加密。Linux使用strongSwan或Libreswan实现。

OpenVPN:开源、用户空间VPN。支持UDP/TCP,支持多种加密算法如AES-256。配置灵活,适合初学者。

WireGuard:现代VPN协议,内核集成(从Linux 5.6起)。代码简洁(仅4000行),性能优越,使用ChaCha20加密。

L2TP/IPSec:Layer 2 Tunneling Protocol结合IPSec。Linux通过xl2tpd实现,但安全性不如WireGuard。

PPTP:Point-to-Point Tunneling Protocol,老旧,不推荐,因弱加密。

选择协议时,考虑安全性、速度和兼容性。WireGuard在2025年已成为主流,据VPNMentor调研,超过60%的Linux用户偏好它。

隧道技术的基本概念

什么是隧道?
隧道(Tunneling)是将一种协议的数据封装在另一种协议中传输的技术。不同于VPN的加密重点,隧道更注重数据转发和隔离。例如,GRE(Generic Routing Encapsulation)隧道将IP数据包封装在另一个IP包中。

Linux支持多种隧道:IP-in-IP、GRE、SIT(IPv6-in-IPv4)、VXLAN(用于虚拟化网络)等。隧道常用于VPN中,但也可独立使用,如SSH隧道转发端口。

隧道的工作原理:源端封装数据,隧道端点解封装。优点:绕过网络限制、实现网络叠加。缺点:增加开销,可能降低MTU(Maximum Transmission Unit)。

隧道的类型
点对点隧道:如IP-in-IP,用于简单IPv4隧道。

多点隧道:VXLAN,支持大规模虚拟网络。

加密隧道:如IPSec隧道。

非加密隧道:GRE,常与IPSec结合。

在Linux中,隧道通过ip tunnel命令创建,内核模块如tun/tap提供虚拟接口。

Linux VPN与隧道的内部机制
内核视角
Linux内核使用Netfilter框架处理VPN和隧道。IPSec在内核中实现,通过xfrm(IPSec框架)管理策略和状态。隧道接口如tun0是虚拟网卡,数据通过它路由。

当数据进入VPN隧道:
1.应用层数据传入socket。
2.内核加密(如果适用)。
3.封装成隧道包。
4.通过物理接口发送。

接收端逆过程。性能瓶颈:加密开销,WireGuard使用现代CPU指令优化。

用户空间实现
OpenVPN运行在用户空间,使用tun/tap驱动与内核交互。tap模拟以太网,tun模拟IP层。配置文件定义证书、密钥和路由。SSH隧道使用ssh -L或-D选项,简单但不适合高负载。

安全机制
VPN使用证书(X.509)、预共享密钥(PSK)或用户名/密码认证。隧道可添加ACL(Access Control List)限制流量。

常见攻击:中间人(MITM)通过TLS 1.3缓解;DoS通过限速防御。

Linux VPN的配置方法

OpenVPN配置
安装:apt install openvpn (Ubuntu) 或 yum install openvpn (CentOS)。

服务器配置:
生成证书:使用easy-rsa工具。
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh

服务器配置文件/etc/openvpn/server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
cipher AES-256-GCM
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

启动:systemctl enable --now openvpn@server。

客户端配置类似,生成客户端证书,配置文件中remote指向服务器。

WireGuard配置
安装:apt install wireguard。

服务器:
生成密钥:wg genkey | tee private.key | wg pubkey > public.key。

配置/etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.1/24
PrivateKey = <server_private_key>
ListenPort = 51820

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.0.0.2/32

启动:wg-quick up wg0。

客户端类似,反向Peer。

WireGuard的优势:配置简单,启动快。

IPSec配置(使用strongSwan)
安装:apt install strongswan。

配置/etc/ipsec.conf:
conn site-to-site
  left=192.168.1.1
  leftsubnet=192.168.1.0/24
  leftid=@server.example.com
  leftauth=psk
  right=192.168.2.1
  rightsubnet=192.168.2.0/24
  rightid=@client.example.com
  rightauth=psk
  type=tunnel
  auto=start
  keyexchange=ikev2
  ike=aes256-sha256-modp2048
  esp=aes256-sha256

密钥在/etc/ipsec.secrets:@server.example.com @client.example.com : PSK "sharedsecret"。

启动:ipsec start。

Linux隧道的配置方法

GRE隧道
加载模块:modprobe ip_gre。

创建:
ip tunnel add gre1 mode gre remote 192.168.2.1 local 192.168.1.1 ttl 255
ip link set gre1 up
ip addr add 10.0.0.1/30 dev gre1
ip route add 192.168.3.0/24 via 10.0.0.2

对端类似。这创建了一个非加密隧道,常与IPSec结合。

SSH隧道
本地转发:ssh -L 8080:localhost:80 user@remote (本地8080转发到远程80端口)。
动态隧道:ssh -D 1080 user@remote (SOCKS代理)。
反向隧道:ssh -R 8080:localhost:80 user@remote。

SSH隧道简单,适合临时使用。

VXLAN隧道
用于数据中心,需要安装iproute2。

创建:
ip link add vxlan0 type vxlan id 10 dev eth0 dstport 4789
ip addr add 10.1.0.1/24 dev vxlan0
ip link set vxlan0 up
bridge fdb add 00:00:00:00:00:00 dst 192.168.1.2 dev vxlan0

VXLAN支持多租户,VNI(VXLAN Network Identifier)隔离。

VPN与隧道的比较与选择
表格:常见协议比较
协议/技术 安全性 速度 配置复杂度 适用场景 Linux支持
OpenVPN 高 (AES) 中等 远程访问 用户空间
WireGuard 高 (ChaCha20) 移动/服务器 内核
IPSec 高 (IKEv2) 站点到站点 内核
GRE 低 (无加密) 简单隧道 内核
SSH隧道 中 (SSH加密) 端口转发 用户空间
VXLAN 低 (可加加密) 中等 云虚拟化 内核

选择依据:安全性优先选WireGuard;大规模选VXLAN;兼容性选OpenVPN。

常见问题排查
VPN问题
连接失败:检查防火墙(ufw allow 1194/udp),日志/var/log/openvpn.log。
DNS泄露:使用push "dhcp-option DNS 8.8.8.8"。
速度慢:切换UDP,优化MTU(tun-mtu 1400)。
工具:tcpdump -i tun0捕获流量;wg show查看WireGuard状态。

隧道问题
MTU问题:隧道开销导致碎片。设置ip link set gre1 mtu 1476。
路由冲突:使用ip route检查。
性能瓶颈:监控iftop或nload。
系统日志:dmesg | grep tun。

优化与高级应用
性能优化
使用硬件加速:AES-NI for OpenVPN。
多线程:OpenVPN支持worker threads。
负载均衡:多VPN实例。

高级配置
Split Tunneling:仅路由特定流量。WireGuard AllowedIPs控制。
Policy-Based Routing:使用ip rule和table。
集成LDAP/RADIUS认证。

云环境
AWS VPC使用IPSec;Kubernetes使用Calico VXLAN。

安全最佳实践
定期更新:如WireGuard漏洞修复。
最小权限:运行在nobody用户。
审计:使用fail2ban防暴力破解。

避免常见错误:不使用弱密码;启用Perfect Forward Secrecy (PFS)。

历史演变与未来趋势
VPN源于1990s的PPTP,Linux从2.4内核支持IPSec。WireGuard 2018年发布,2020集成内核。

未来可期:量子安全加密(如post-quantum crypto);零信任模型集成等。